/**
 * @file router.js
 *
 * 终页线路行为
 * - 套餐列表控件  TCent.packages
 *
 * @require fish.js,Tcent.js
 * @author 2997@17u.cn
 * @version 2.9  at 2013-6-9
 * @modify 修复了cookie记录过期导致没有线路资源的问题。  by dh2997 at 2013-08-14
 *           - 不合法的日期，例如2013-08-01，直接等同于没选日期的情况。
 *           - 21：30 分的情况。例如设置了2013-08-22，会提醒换个日期。
 * @modify 去除 date,notsure,adult,children by dh2997 at 2013-10-09
 * @modify 添加 抢购 at 2014-03-22
 */
(function(){
/**
 * router
 ********************/
TCent.behaviors.router = {
  attach : function(content,settings){
    // A. 初始化加载一个套餐
    // =====================
    fish.all('#router').once('router', function(){
      // 初始化最初的套餐信息
      TCent.router.wrapper = fish.all('.package_table_wrapper', this);
      TCent.router.get();
    })

    // B.绑定套餐行为
    // ==============
    fish.all('#router .package_table .package').once('package', function(){
      if(fish.one(this).hasClass('package_snapping')){
        var Snapping = new TCent.router.Snapping(fish.one(this));
      }

      // 处理预订按钮。
      fish.all('.action a', this).on('click', function(e){
        fish.preventDefault(e);

        if(fish.one(this).hasClass('pop_toggle')){
          // 无线弹框，不做任何操作
          return;
        }

        var pack = fish.one(this).getParent('.package'),
            packageid = pack.attr('data-package-id'),
            package_title = pack.attr('data-package-title') || '';
            num = parseInt(fish.one('.num input', pack).val()), // 套餐数量。
            routerid = TCent.settings.packages.routerid,
            date = '';

        // 点击的按钮是抢购模式
        if(Snapping){

          if(Snapping.status != 0){
            // 不是抢购中的，不做任何事
            // do nohting
          }else{
            // 抢购中，直接去下单页
            var url = TCent.settings.packages.url.order + '&routerid=' + routerid + '&packageid=' + packageid + '&num=' + 1;
            location.href = url;
          }
          return;
        }

        // 打开日历
        TCent.packages.id = packageid;
        TCent.packages.min_user_num = fish.one(this).attr('data-user-number');
        if(TCent.packages.min_user_num){
            TCent.packages.title = package_title + '<span>(本套餐' + TCent.packages.min_user_num + '人起订，日历框价格为' + TCent.packages.min_user_num +  '人价 )</span>';
          }else{
            TCent.packages.title = package_title;
          }
        TCent.packages.submit();
      })

      fish.all('.name a', this).on('click', function(e){
        fish.preventDefault(e);
      })

      // 无线app动画，取消了，效果不好。
      // var Anim,timer;
      // fish.all('.action .pop_toggle', this).hover(function(){
      //   Anim && Anim.stop();
      //   fish.one('.pop_content', this).css('display:block; opacity: 1.0;filter:Alpha(Opacity=100);');
      // }, function(){
      //   var that = this
      //   timer = setTimeout(function(){
      //     Anim = fish.one('.pop_content', that).anim('opacity: 0;filter:Alpha(Opacity=0);', 500)
      //   }, 500)
      // })
    });

    // B.1 绑定toggle
    fish.all('#router .package_table_wrapper .toggle_more').once('toggle-more', function(){
      fish.one(this).on('click', function(e){
        fish.preventDefault(e);
        var wrapper = fish.one(this).getParent('.package_table_wrapper'),
            items = fish.all('.package', wrapper);

        if(wrapper.hasClass('expanded')){
          // 收缩
          for(var i = 8; i < items.length; i++){
            fish.one(items[i]).addClass('none');
          }

          fish.one(this).html('查看更多套餐');
          wrapper.removeClass('expanded');
        }else{
          // 展开
          for(var i = 8; i < items.length; i++){
            fish.one(items[i]).removeClass('none');
          }

          fish.one(this).html('收起');
          wrapper.addClass('expanded');
        }

        TCent.secondary_nav.reset();
        TCent.secondary_nav.resetmFix();
      })
    })

    // C. Price tip
    fish.all('#router .price_tooltip').once('price-tooltip', function(){
      fish.one(this).tooltip({
        placement : 'bottom',
        content : '<div class="price_tooltip_content">' + fish.one(this).attr('data-tooltip') + '</div>'
      });
    })

    // D. 抢购 snapping
    // fish.all('#router .package_table .package_snapping').once('package-snapping', function(){
    //   var Snapping = new TCent.router.Snapping(fish.one(this));
    // })

    // F. 当日订提示
    fish.all('.label_today').once('label-today', function(){
      fish.all(this).tooltip({
        content : fish.all(this).attr('data-title') || '本套餐支持当天预定。现在预订，当天出游。',
        placement : 'bottom-left',
        classname : 'tooltip_label_today',
        offset : {
          top : 5,
          left : -10
        }
      })
    })
  }
}

TCent.router = {
  // 加载套餐信息(根据当前routerid和date得到全部的套餐数据。)
  get : function(){
    if(!this.wrapper && !this.wrapper.length) return;

    // 显示加载中...
    this.loading();

    // 开始加载
    var routerid = TCent.settings.packages.routerid,
        date = '',
        that = this;

    fish.ajax({
      url : TCent.settings.packages.url.packages,
      data : 'routerid=' + routerid + '&date=' + date,
      fn : function(data){
        var html = ''
        if(!data){
          // 没有匹配的套餐
          html = '<table class="package_table">\
                  <tr>\
                    <th class="th_name">套餐名称</th>\
                    <th class="th_sceneries">景点票型</th>\
                    <th class="th_hotels">酒店房型</th>\
                    <th class="th_breakfast">早餐</th>\
                    <th class="th_size">适用人数/份</th>\
                    <th class="th_price">套餐价</th>\
                    <th class="th_action"></th>\
                  </tr>\
                  <tr>\
                    <td colspan="7" class="empty">很抱歉，暂无可供选择的套餐，您可以查看其他产品。</td>\
                  </tr>\
                </table>';

        }else{
          html = data;
        }

        html = '<div class="just_wrapper">' + html + '</div>'; // just for .html().

        html = fish.create(html);

        // 创建相应的css
        TCent.createCss(fish.one('.package_table', html).attr('data-css-link'));

        fish.all('.package .name .label_warning', html).html('当天可订');

        var items = fish.all('.package', html);

        if(items.length > 8){
          html.html('bottom', '<div class="toggle_more_wrapper"><a href="#" class="toggle_more">查看更多套餐</a></div>');
        }

        for(var i = 8; i < items.length; i++){
          fish.one(items[i]).addClass('none');
        }

        that.wrapper.html(html.html());

        // 获取最大值和最小值，重置页面的价格
        var price = fish.one('.package_table', that.wrapper).attr('data-price');
        if(price && parseInt(price)){
          // 获取价格，重置价格。
          price = price.split(',');
          if(price.length == 2){
            price = price[0] + '-' + price[1];
          }else{
            price = price[0]
          }

          fish.one('#router .details .price .right strong').html(price + '<span>起/人</span>');
        }else{
          // 价格无效
          fish.one('#router .details .price').html('remove');
        }

        TCent.attachBehaviors();

        TCent.secondary_nav.reset();
        TCent.secondary_nav.resetmFix();
      }
    })
  },

  // 处理预订预订
  order : function(){
  },

  // 显示加载中。
  loading : function(){
    this.wrapper.html('<p class="loading">加载中...</p>')
  },

  // wrapper
  wrapper : null
}

/**
 * router package snapping
 * 套餐抢购
 */
TCent.router.Snapping = function(entry){
  this.entry = entry;
  return this.init();
}

TCent.router.Snapping.prototype = {
  // 初始化
  init : function(){
    // 设置开始时间、结束时间
    var times = this.entry.attr('data-snapping-time').split(',');
    this.start = parseInt(times[0]);
    this.end = parseInt(times[1]);

    // 设置当前状态
    if(this.start > 0){
      // 未开始
      this.status = -1;
    }else if(this.start == 0 && this.end > 0){
      // 进行中
      this.status = 0;
    }else{
      // 其他都是已结束
      this.status = 1;
    }

    this.setByStatus();

    return this;
  },
  // 抢购的实体，这里就是对应的.package
  entry : null,
  // 还剩多少时间开始
  start : 0,
  // 还剩多少时间结束
  end : 0,
  // 当前套餐抢购所处状态
  // -1还未开始, 0进行中, 1已结束
  status : 0,
  // 倒计时，以一秒为单位
  // 输出这样的倒计时 “21时20分46秒后开始”
  //
  // @param time 需要倒计时的时长
  // @param target
  // @param callback 计时器结束的时候需要干什么
  // @param suffix 倒计时输出语句的后缀，这里可以是“后开始”，“后结束”
  countDown : function(time, target, callback, suffix){
    if(time < 0){
      callback();
      return;
    }

    // 显示倒计时
    target.html(this.timeToStr(time) + suffix);
    var that = this;

    setTimeout(function(){
      that.countDown.apply(that, [time - 1000, target, callback, suffix])
    }, 1000)
  },

  // 根据时间返回 “X天X时X分X秒”
  timeToStr : function(time){
    var days = ~~(time / (24 * 60 * 60 * 1000)),
        hours = ~~((time - 24 * 60 * 60 * 1000 * days)/(60 * 60 * 1000)),
        mins = ~~((time - 24 * 60 * 60 * 1000 * days - 60 * 60 * 1000 * hours)/(60 * 1000)),
        seconds = ~~((time - 24 * 60 * 60 * 1000 * days - 60 * 60 * 1000 * hours - 60 * 1000 * mins)/1000),
        str = '';

    // 添加天数
    str += days > 0 ? days + '天' : '';
    // 添加小时数
    if(hours > 0 || str != ''){
      // 当存在小时数或者天数
      str += hours + '时';
    }
    // 添加分钟
    if(mins > 0 || str != ''){
      str += mins + '分';
    }
    // 添加秒数
    str += seconds + '秒';

    return str;
  },

  // 根据状态设置抢购外表
  setByStatus : function(){
    // 未开始
    if(this.status == -1) this.setComming();
    // 进行中
    if(this.status == 0) this.setGoing();
    // 已结束
    if(this.status == 1) this.setEnd();
  },
  // 设置为未开始状态
  setComming : function(){
    this.entry.addClass('package_snapping_comming');

    if(fish.one('.action span', this.entry).length == 0){
      fish.one('.action', this.entry).html('top', '<span></span>')
    }
    if(!fish.one('.action a', this.entry).hasClass('pop_toggle')){
      fish.one('.action a', this.entry).html('即将开始')
    }

    var that = this;
    this.countDown(this.start, fish.one('.action span', this.entry), function(){
      that.status = 0;
      that.setByStatus();
    }, '后开始')
  },
  setGoing : function(){
    this.entry.removeClass('package_snapping_comming');
    this.entry.addClass('package_snapping_going');

    if(fish.one('.action span', this.entry).length == 0){
      fish.one('.action', this.entry).html('top', '<span></span>')
    }

    if(!fish.one('.action a', this.entry).hasClass('pop_toggle')){
      fish.one('.action a', this.entry).html('抢购')
    }

    var that = this;
    this.countDown(this.end - this.start, fish.one('.action span', this.entry), function(){
      that.status = 1;
      that.setByStatus();
    }, '后结束')
  },
  setEnd : function(){
    this.entry.removeClass('package_snapping_comming');
    this.entry.removeClass('package_snapping_going');
    this.entry.addClass('package_snapping_end');
    fish.one('.action a', this.entry).html('已结束')
    fish.one('.action span', this.entry).html('remove');
  }
}

})();
